/**
 * 文件上传API - 用于与后端文件上传相关接口交互
 */
import api from './axios';

/**
 * 上传文件响应数据接口
 */
export interface UploadResponse {
  url: string;           // 文件访问URL
  filename: string;      // 服务器存储的文件名
  originalname: string;  // 原始文件名
  size?: number;         // 文件大小（可选）
}

/**
 * 上传图片
 * 对应后端POST /adminapi/files/images路由
 */
export const uploadImage = async (file: File) => {
  try {
    // 创建FormData对象，用于文件上传
    const formData = new FormData();
    formData.append('image', file);
    
    // 发送请求
    const response = await api.post('/files/images', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    
    // 处理响应
    if (response.data && response.data.code === 200 && response.data.data) {
      return response.data.data;
    } else {
      throw new Error(response.data.msg || '图片上传失败');
    }
  } catch (error) {
    console.error('图片上传失败:', error);
    throw error;
  }
};

/**
 * 上传头像
 * 对应后端POST /adminapi/files/avatar路由
 */
export const uploadAvatar = async (file: File) => {
  try {
    // 创建FormData对象，用于文件上传
    const formData = new FormData();
    formData.append('avatar', file);
    
    // 发送请求
    const response = await api.post('/files/avatar', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    
    // 处理响应
    if (response.data && response.data.code === 200 && response.data.data) {
      return response.data.data;
    } else {
      throw new Error(response.data.msg || '头像上传失败');
    }
  } catch (error) {
    console.error('头像上传失败:', error);
    throw error;
  }
};

/**
 * 上传带额外参数的图片
 * 对应后端POST /adminapi/files/images路由（带额外参数）
 */
export const uploadImageWithData = async (file: File, extraData: Record<string, string | number | boolean>) => {
  try {
    // 创建FormData对象，用于文件上传
    const formData = new FormData();
    formData.append('image', file);
    
    // 添加额外数据
    Object.entries(extraData).forEach(([key, value]) => {
      formData.append(key, String(value));
    });
    
    // 发送请求
    const response = await api.post('/files/images', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    
    // 处理响应
    if (response.data && response.data.code === 200 && response.data.data) {
      return response.data.data;
    } else {
      throw new Error(response.data.msg || '图片上传失败');
    }
  } catch (error) {
    console.error('图片上传失败:', error);
    throw error;
  }
};

export default {
  uploadImage,
  uploadAvatar,
  uploadImageWithData
};

